Fluent Interface Builder

Simple Builder에서 리턴값이 void였던 add_child 메서드를 자기 자신을 참조로서 리턴되도록 수정한다.

자기 자신을 참조로서 리턴하기 때문에 메서드들이 꼬리를 무는 호출이 가능하다.
이와 같은 형태로 호출함을 흐름식 인터페이스(fluent interface)라고 한다.
HtmlBuilder& add_child(string child_name, string child_text){
HtmlElement e{child_name, child_text};
root.elements.emplace_back(e);
return *this;
}
//
HtmlBuilder builder{"ul"};
//
// fluent interface
builder.add_child("li", "hello").add_child("li", "world");
cout<<builder.str()<<endl;
(참조로서 선언될 때, 내부에서 생성된 객체에 대한 참조를 반환하지 말것, from effective C++)

참조로 반환하지 않고, 포인터로 반환해서 사용할 수도 있다.
HtmlBuilder* add_child(string child_name, string child_text){
HtmlElement e{child_name, child_text};
root.elements.emplace_back(e);
return this;
}
//
HtmlBuilder* builder=new HtmlBuilder("ul");
builder->add_child("li", "hello")->add_child("li", "world");
cout<<builder.str()<<endl;